package com.study.hot.jetpack.hilt.model

import com.study.hot.di.dagger.DaggerApp
import javax.inject.Inject
import javax.inject.Singleton

/**
 * <pre>
 *     author : slx
 *     time   : 2020/11/24
 *     desc   : 驾驶员，被Deliver依赖，需要注入其构造方法中
 * </pre>
 */
// 全局单例
@Singleton
// 要注入Context对象，而hilt不知道应该如何注入，会报错
// 如果使用module解决显然不行，因为我们无法自己new Context
// 对于系统对象hilt提供预置Qualifier，例如此处 @ApplicationContext，表示Application作用域
// 此时如果提供@ActivityContext编译报错,因为有@Singleton的存在，解决方案可以使用其他作用域代替单例
//class Driver @Inject constructor(@ApplicationContext val context: Context)
// 由于Activity、Application作用域使用比较多，所以对于这两种作用域，不用声明@XxxContext注解也能被自动注入
//class Driver @Inject constructor(val application: Application)
// 但是仅限于这两个类，其子类也不行,但是也有解决方案，因为Application是单例的注入的实例就是自定义的Application
// 可以使用自定义的ApplicationModule 解决
class Driver @Inject constructor(val myApp: DaggerApp) {
    fun testInjectMyApp() {
        myApp.testInject()
    }
}
